package com.project.collectAPI.comm;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.ocr_api20210707.Client;
import com.aliyun.ocr_api20210707.models.RecognizeGeneralRequest;
import com.aliyun.ocr_api20210707.models.RecognizeGeneralResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;

import java.io.InputStream;

public class AliyunOcrUtils {

    private static final String accessKeyId="LTAI5tE5TjuivoJpZwHGsaMh";
    private static final String accessKeySecret="50IgtePm3hdVcRTUE3vGv3Bl0DmCws";

    public static String getAccessKeyId(){
        return accessKeyId;
    }

    public static String getAccessKeySecret(){
        return accessKeySecret;
    }
        /**
         * 使用AK&SK初始化账号Client
         * @param accessKeyId
         * @param accessKeySecret
         * @return Client
         * @throws Exception
         */
        public static com.aliyun.ocr_api20210707.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填，您的 AccessKey ID
                    .setAccessKeyId(accessKeyId)
                    // 必填，您的 AccessKey Secret
                    .setAccessKeySecret(accessKeySecret);
            // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
            config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
            return new com.aliyun.ocr_api20210707.Client(config);
        }

        /**
         * 使用STS鉴权方式初始化账号Client，推荐此方式。
         * @param accessKeyId
         * @param accessKeySecret
         * @param securityToken
         * @return Client
         * @throws Exception
         */
        public static com.aliyun.ocr_api20210707.Client createClientWithSTS(String accessKeyId, String accessKeySecret, String securityToken) throws Exception {
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    // 必填，您的 AccessKey ID
                    .setAccessKeyId(accessKeyId)
                    // 必填，您的 AccessKey Secret
                    .setAccessKeySecret(accessKeySecret)
                    // 必填，您的 Security Token
                    .setSecurityToken(securityToken)
                    // 必填，表明使用 STS 方式
                    .setType("sts");
            // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
            config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
            return new com.aliyun.ocr_api20210707.Client(config);
        }

        /*public static void main(String[] args_) throws Exception {
            java.util.List<String> args = java.util.Arrays.asList(args_);
            // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考，建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html
            com.aliyun.ocr_api20210707.Client client = AliyunOcrUtils.createClient(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            com.aliyun.ocr_api20210707.models.RecognizeGeneralRequest recognizeGeneralRequest = new com.aliyun.ocr_api20210707.models.RecognizeGeneralRequest();
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            com.aliyun.ocr_api20210707.models.RecognizeGeneralResponse resp = client.recognizeGeneralWithOptions(recognizeGeneralRequest, runtime);
            com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
        }*/


    /**
     * 获取识别结果
     * @param 路径 "src/main/resources/static/images/screenShot/imgFile/"
     * @param 图片名称 "青少年模式.png"
     */
    public static String GetOcrContent(String FileName) throws Exception {
        String OcrRes="无法识别";
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用，仅供参考，建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html
        Client client = AliyunOcrUtils.createClient(AliyunOcrUtils.getAccessKeyId(), AliyunOcrUtils.getAccessKeySecret());
        // 需要安装额外的依赖库，直接点击下载完整工程即可看到所有依赖。
        String FilePath="src/main/resources/static/images/screenShot/imgFile/"+FileName;
        InputStream bodyStream = com.aliyun.darabonba.stream.Client.readFromFilePath(FilePath);
        RecognizeGeneralRequest recognizeGeneralRequest = new RecognizeGeneralRequest()
                .setBody(bodyStream);
        RuntimeOptions runtime = new RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            RecognizeGeneralResponse res = client.recognizeGeneralWithOptions(recognizeGeneralRequest, runtime);
            OcrRes=res.getBody().data;
            if(!StringUtils.isEmpty(OcrRes) && OcrRes!="无法识别"){
                OcrRes= JSONObject.parseObject(OcrRes).get("content").toString();
            }
            //System.out.println("处理返回值:"+res.getBody().data);
        } catch (TeaException error) {
            // 如有需要，请打印 error
            System.out.println("识别错误:"+error.message);
            Common.assertAsString(error.message);

        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要，请打印 error
            System.out.println("识别错误:"+error.message);
            Common.assertAsString(error.message);
        }
        return OcrRes;
    }


} //class End
